/*
 * 
 *  This file is part of Sourceprojects.org Thracia.
 *  Copyright 2010 noctarius
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 * 
 */
package org.sourceprojects.thracia.output.writer;

import java.beans.XMLEncoder;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;

import org.sourceprojects.thracia.output.sender.QueuedReport;
import org.sourceprojects.thracia.report.beans.Report;

/**
 * @author noctarius
 * 
 */
public class BeansWriter<T extends Report, E extends Object> extends
		AbstractOutputWriter<T, E> {
	private XMLEncoder encoder;
	private File file;

	public BeansWriter(T report) {
		super(report);
	}

	@Override
	public QueuedReport flush() {
		if (render() == null)
			return null;

		encoder.writeObject(getReport());
		encoder.close();

		return new QueuedReport(file.getName());
	}

	@Override
	@SuppressWarnings("unchecked")
	protected E render() {
		try {
			removeExistingErrorLogsForReport();

			file = getReportFile();

			encoder = new XMLEncoder(new BufferedOutputStream(
					new FileOutputStream(file)));

			return (E) createDocumentBuilder().newDocument();
		} catch (final Exception e) {
			return null;
		}
	}

	@Override
	protected int getSequenceNumber(String data) {
		return 0;
	}
}
